package com.itheima.edu.info.student.manager.controller;

import com.itheima.edu.info.student.manager.domain.Student;
import com.itheima.edu.info.student.manager.service.StudentService;

import java.util.Scanner;

//客服类:面向客户,输出功能,收集客户需求
public abstract class BaseStudentController {
    //创建业务员对象
    private StudentService service = new StudentService();
    public Scanner sc = new Scanner(System.in);
    public void start() {
        while (true) {
            System.out.println("--------欢迎来到 <学生> 管理系统--------");
            System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.退出");
            String choice = sc.next();
            switch (choice) {
                case "1":
                    addStudent();
                    break;
                case "2":
                    //System.out.println("删除学生");
                    deleteStudent();
                    break;
                case "3":
                    //System.out.println("修改学生");
                    updeteStudent();
                    break;
                case "4":
                    //System.out.println("查看学生");
                    showStudent();
                    break;
                case "5":
                    System.out.println("感谢您使用学生管理系统, 再见!");
                    return;
                default:
                    System.out.println("您的输入有误, 请重新输入");
                    break;
            }
        }

    }

    //修改功能
    public void updeteStudent() {
        Student[] stus = service.showStudent();
        //如果数组容器不为空,遍历打印
        if (stus == null) {
            System.out.println("数组中不存在数据");
            return;
        }
        //1.拿到要修改的学生学号
        System.out.println("请输入要修改的学生学号");
        String updateId = inputStudentId(true);
        //3.封装新的学生对象
        Student newStu = inputStudentInfo(updateId);
        //4.指挥业务员开始修改操作
        service.updateStudent(updateId, newStu);
        //根据业务员返回来的结果,输出修改结果
        System.out.println("修改成功");
    }

    //删除功能
    public void deleteStudent() {
        Student[] stus = service.showStudent();
        //如果数组容器不为空,遍历打印
        if (stus == null) {
            System.out.println("数组中不存在数据");
            return;
        }

        //1.提示用户输入要删除的学生学号
        System.out.println("请输入要删除的学生学号");
        String id = inputStudentId(true);
        //2.指导业务员开始删除业务
        service.deleteStudent(id);
        //3.展示删除结果
        System.out.println("删除成功");


    }

    //查看功能
    public void showStudent() {
        Student[] stus = service.showStudent();
        //如果数组容器不为空,遍历打印
        if (stus != null) {
            System.out.println("学号\t\t姓名\t年龄\t生日");
            for (int i = 0; i < stus.length; i++) {
                if (stus[i] != null) {
                    System.out.println(stus[i].getId() + "\t" + stus[i].getName() + "\t" + stus[i].getAge() + "\t\t" + stus[i].getBirthday());
                }

            }
        }
        //如果数组容器为空,输出提示信息
        else {
            System.out.println("暂无学生信息,请添加");
        }


    }

    //添加学生
    public void addStudent() {
        //提示客户键盘录入学生信息
        System.out.println("请输入学生学号");
        String id = inputStudentId(false);
        Student stu = inputStudentInfo(id);
        //指挥业务员对象进行添加学生的业务处理
        boolean result = service.addStudent(stu);
        //根据业务员的添加操作处理结果输出添加成功或添加失败
        if (result) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }
    }

    //封装对象的方法
    public abstract Student inputStudentInfo(String id);

    //得到一个存在或者不存在的学号,结果取决于方法参数开关,设定参数,想取得不存在的学号传入false,存在的学号传入true
    public String inputStudentId(boolean flag) {
        String id;
        while (true) {
            id = sc.next();
            //指挥业务员判断学号是否存在
            boolean exists = service.isExists(id);
            //只有当判断结果与传入参数相同时,循环结束,都为true,则返回一个存在的学号,都为false,ze返回一个不存在的学号
            if (exists == flag) {
                break;
            } else {
                System.out.println("学号不可用,请重新输入");
            }
        }
        //返回结果
        return id;
    }
}




